package com.group10.controller;

import com.group10.entity.Result;
import com.group10.entity.User;
import com.group10.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;


@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserServiceImpl userService;
//    @Autowired
//    private UserInfoServiceImpl userInfoService;

    /**
     * 用户登录验证
     *
     * @param id       用户id
     * @param password 用户密码
     * @return 返回一个Result对象
     */
    @PutMapping("/login")
    public Result<?> login(String id, String password) {
        return userService.login(id, password);
    }

    @GetMapping("/findById")
    public Result<?> findById(String id){
//        System.out.println("--" +id);
        return Result.success(userService.findById(id));
    }

    /**
     * 用户信息获取
     *
     * @param token 浏览器自带的token跳转
     * @return 返回一个Result对象，其中封装了一个解析后的token
     */
    @GetMapping("/info")
    public Result<?> info(@RequestHeader(name = "Authorization") String token) {
        Map<String, Object> map = userService.userInfo(token);
        return Result.success(map);
    }

    /**
     * 用户注册
     *
     * @param id       注册用户id
     * @param password 密码
     * @param email    邮箱
     * @param code     邮箱验证码
     * @param name     昵称
     * @param sex      性别
     * @param age      年龄
     * @param ethnic   民族
     * @param img      头像
     * @return 返回注册结果
     */
    @PostMapping("/insertUser")
    public Result<?> insertUser(String id, String password, String email, String code, String name, String sex, int age, String ethnic, String img) {
        return userService.insertUser(id, password, email, code, name, sex, age, ethnic, img);
    }

    /**
     * 找回密码
     *
     * @param email  用户邮箱
     * @param newPsd 新密码
     * @param code   验证码
     * @return 返回结果
     */
    @PostMapping("/findPassword")
    public Result<?> findPassword(String email, String newPsd, String code) {
        return userService.findPassword(email, newPsd, code);
    }

    /**
     * 找回密码
     *
     * @param token 跳转携带token
     * @return 返回用户列表
     */
    @GetMapping("/getAllUser")
    public Result<?> getAllUser(@RequestHeader(name = "Authorization") String token, Integer pageNum, Integer pageSize) {
        return userService.getAllUser(token, pageNum, pageSize);
    }

    /**
     * 解封账号
     *
     * @param id 用户id
     * @return 返回结果
     */
    @PutMapping("/updateState")
    public Result<?> updateState(String id) {
        if (userService.updateState(id)) {
            return Result.success();
        } else {
            return Result.error("状态更新错误");
        }
    }

    /**
     * 禁言
     *
     * @param id     用户id
     * @param minute 封禁时长/分钟
     * @return 返回结果
     */
    @PutMapping("/silence")
    public Result<?> silence(String id, Integer minute) {
        if (userService.silence(id, minute)) {
            return Result.success();
        } else {
            return Result.error("状态更新错误");
        }
    }

    /**
     * 封号
     *
     * @param id     用户id
     * @param minute 封禁时长/分钟
     * @return 返回结果
     */
    @PutMapping("/suspend")
    public Result<?> suspend(String id, Integer minute) {
        if (userService.suspend(id, minute)) {
            return Result.success();
        } else {
            return Result.error("状态更新错误");
        }
    }

    @PostMapping("/updateUser")
    public Result<?> updateUser(User user) {
        return userService.updateUser(user);
    }

    @GetMapping("/newToken")
    public Result<?> newToken(@RequestHeader(name = "Authorization") String token) {
        return userService.newToken(token);
    }


}
